package com.jbit.arraylisthomework02;

import java.util.ArrayList;
import java.util.List;
 
/**
 	【编码】写一个MyStack 类，表示“栈”这种数据结构。 
	 栈在表示上  ，   就如同一个单向开口的盒子，每当有新数据进入时，都是进入栈顶。    
	 其基 本操作为push 和pop。push 表示把一个元素加入栈顶，pop 表示把栈顶元素弹出。  
	栈的特点：先进后出。   
	栈的基本操作： 
	1） push(Object o)：表示把元素放入栈 
	2） Object pop()：返回栈顶元素，并把该元素从栈中删除。如果栈为空，则返回 null 值 
	3） Object peek()：返回栈顶元素，但不把该元素删除。如果栈为空，则返回null值。
	4） boolean isEmpty()：判断该栈是否为空 
	5） int size()：返回该栈中元素的数量 
	要求： 利用List，实现栈。存放整数Integer对象即可
 */
public class MyStack {
 
	List<Integer> list = new ArrayList<>();
 
	// 1） push(Object o)：表示把元素放入栈
	public void push(Integer o) {
		list.add(o);
	}
 
	// 2） Object pop()：返回栈顶元素，并把该元素从栈中删除。如果栈为空，则返回 null 值 
	public Integer pop() {
 
		// 栈在表示上 就如同一个单向开口的盒子，每当有新数据进入时，都是进入栈顶
		// 所以对其操作就是集合下标的最后一个元素
		if (list.size() == 0) {
			return null;
		} else {
			// 只需删除集合中最后一个元素的下标位置，因为从0开始，所以最后一个小标是 长度-1
			return list.remove(list.size() - 1);
		}
	}
 
	// 3） Object peek()：返回栈顶元素，但不把该元素删除。如果栈为空，则返回null值。
	public Integer peek() {
		if (list.size() == 0) {
			return null;
		} else {
			// 获取左后一个小标位置
			return list.get(list.size() - 1);
		}
	}
 
	// 4） boolean isEmpty()：判断该栈是否为空 
	public boolean isEmpty() {
		return list.size() == 0;
	}
 
	// 5） int size()：返回该栈中元素的数量 
	public int size() {
		return list.size();
	}
}
